Нажмите для просмотра прикрепленного файлаЗдравия желаю господа.
На работе поставил 3 отдельностоящих ПЛС М340, которые читают и обрабатывают инфо со своих модулей.
Все Плсишки работают на BMX P34 2020. На каждом контроллере заведен свой IP адрес.
Все эти Р34 2020 подсоеденены к эзернету. Через эзернет я могу с компа на котором установлен юнити про подсоедениться к любому контроллеру, и видеть все данные вживую. На этом же компе стоит прога написанная мною на Дельфи, которая подсоединяется ко всем трем контроллерам читает состояние I/O и выводит на экран. Растояние между ПЛСшками около 50 метров, а очень часто нужно что бы
вывод на третьем контроллере зависил от статуса вводов на первом и на втором.
простой пример думаю будет выглядеть так:
PLC 1 Input 1 __ PLC 2 Input 5 ___ PLC 3 Input 3 ___ PLC 3 Output 1
----| |---------------------| |------------------------| |----------------( )--------------
Так вот, столько я не пытался понять как это можно сделать, ничего не добился сам. Поэтому и решил задать тут вопрос.
Что мне надо сделать в программе Unity Pro XL v3, для того что бы научить ПЛСишку 3 читать определенные входы-выходы с ПЛсишек 1 и 2, и наоборот.
Помогите практическим советом пжалуйста, или дайте ссылки на хороший мануал (англ, руск).
Спасибо заранее.
Евгений (N-ск)
7.10.2010, 11:03
У вас программа UNITY (делфи) выполняет функцию MASTER, а контроллеры SLAVE
назначьте 3 контроллер MASTER-ом для опроса 1 и 2
Евгений,
Цитата
У вас программа UNITY (делфи) выполняет функцию MASTER, а контроллеры SLAVE
назначьте 3 контроллер MASTER-ом для опроса 1 и 2
а как это сделать то ? что то я не могу найти как пересести статус хозяин-раб.
Rus75,
спасибо ща покопаюсь
В Modbus TCP/IP нет разделения на Master и Slave, есть разделения на Клиент и Сервер. Любой из ПЛК может одновременно быть и Modbus TCP/IP Client и Server. Для реализации клиентских запросов через проц нужно пользоваться функциями READ_VAR и WRITE_VAR. В хелпе есть примеры для М340 на Modbus TCP/IP. Поищите. Сервера прошиты на уровне оси.
san,
уже несколько дней я безпрерывно копаюсь в сети и в мануалах в поисках ответа на вопрос куда же мне вписать в Unity Pro в пограмме для третьей ПЛСишки этот самый READ_VAR что бы эта самая 3-я ПЛСишка через эзернет соединялась с первой ПЛСишкой и спрашивала у нее состояние входа %I0.4.6 например.
Помогите если сможете.
Сейчас попробую на NOE, потом вышлю пример
Нажмите для просмотра прикрепленного файлаВот пример. Сразу скажу что непосредственно %I считывать нельзя, только %M или %MW. На сервере нужно проделывать переприсвоение. IP-шник пропишите свой, название соединения тоже свое. А так, почитайте еще хелп по этим функциям.
driller
10.10.2010, 11:56
san,
спасибо за помощь, процесс сдвинулся с мертвой точки.
Программа в одной ПЛКшке читает %MW из другой, что в принципе радует,
теперь остается задача разложить полученное число по битам, и прочитать статус именно того ввода\вывода который нужен.
Заметил в библиотеке функцию WORD_To_BIT которая выдаст как я думаю статус каждого бита, только вот чтобы использовать ее, надо как то array of integer где содержится полученное число перевести в этот самый WORD.
есть мысли как это сделать наикратчайшим путем ?
Еще раз спасибо за оказанную помощь.
driller
10.10.2010, 12:20
сделал сам, но не знаю, является ли это лучшим решением.
ANY_Array_INT функцией MAX_ARINT перевел в Integer, Integer функцией INT_TO_WORD перевел в WORD, а далее уже
WORD_TO_BIT выводит распиновку каждого бита котрому присвоена BOOL переменная.
Вот по состоянию этой переменной я и считываю статус.
Это делается просто: %MW20.14 - доступ к 14-му биту
driller
18.10.2010, 17:14
san,
спасибо за помошь, Вы очень помогли в решении этой мелкой но очень важной задачи.
Пожалуйста. Обращайтесь, если что. ;-)
Вопрос появился?
Подскажите,с помощью каких моделей или с помощью какиъх средств осуществить упаковку данных? то есть чтобы биты %M101 106 111 упаковывались в слова
Подскажите пож-та?
типо того
%M101 MOV %MW1.1
%M106 MOV %MW1.2
Если элементов не много то упаковку можно произвести простым присваиванием
%MW1.1:=%M101;
%MW1.2:=%M106;
Если битовых элементов много то можно воспользоваться встронными функциями работы с массивами битовых переменных.
Что-бы сделать определенные данные с одного ПЛК доступными в сети Ethernet для других ПЛК существует также механизм Global Data. Он удобнее если у вас больше 2-х ПЛК и каждый отдает и принимает данные.
Почитать как работает и посмотреть пример использования можно здесь:
http://se-automation.in.ua/articles/27-tra...ady-global-data
Подскажите пож-та,а что может служить ошибкой в дайнонм случае?
Адрессацию в памяти сделал...
{Derived Variables} : The topological type is incompatible. : Massive2_27
Покажите скриншот из менеджера переменных этого массива Massive2_27.
Вот собственно и скриншот
EBOOL и BOOL - это две большие разницы. EBOOL в Премиум занимает 3 бита, а в М340 - по моему 8 бит. Присваивание один другому разрешается, но не привязывание (читай локализация) булевых переменных к прямому EBOOL адресу. Вот по этому у Вас не соответствие типов.
Если Вам не нужно отлавливание фронтов можете не пользоваться %M, а вместо них использовать биты из %MW.
Проблема в том,что если я указываю бит через NW например MW101.1 он у меня меняет не битовую часть а часть 101 то есть 1 на 2 и т.д ,а нужно чтобы меня битовую....Посоветуйте пож-та,как поступить?
Форумчане,не получается добиться от программы нужного результата,ошибок не выдает,но и результата тоже,сдавать проект в ближайшие 5 бдней.
Кто мог бы посмотреть его,был бы признателен,в случае необходимости в долгу не останусь
Подскажите пож-та,что может быть за ошибка,когда я подключаюсь к контроллеру,Unity пишут
This isnt a valid PLC Address,or PLC is busy,or media is off
Точнее как ее решить?
Цитата(san @ 7.10.2010, 15:13)

В хелпе есть примеры для М340 на Modbus TCP/IP. Поищите.
нету. только на serial port
Цитата(san @ 7.10.2010, 16:09)

Нажмите для просмотра прикрепленного файлаВот пример. Сразу скажу что непосредственно %I считывать нельзя, только %M или %MW. На сервере нужно проделывать переприсвоение. IP-шник пропишите свой, название соединения тоже свое. А так, почитайте еще хелп по этим функциям.
k0der , Вам это пример не помог?
Цитата(san @ 6.2.2011, 12:14)

k0der , Вам это пример не помог?
к сожалению нет. посмотре одно видео. завтра на работе протестю.
А что именно в нем не понятно?
Это ж не видео а рисунок.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.